Memory cells that store more than one bit per cell are referred to as multi-level cells. One example of multi-level cell technology is nonvolatile multi-level cell technology. Programming data into multi-level nonvolatile memory cells, and into nonvolatile memory in general, presents multiple engineering challenges. For example, programming is slow: multiple program-and-verify cycles are required, the number and duration of which are functions of the data being programmed and the programming time of individual cells. Furthermore, cell damage that occurs during programming cycles limits the number of times that a cell may be erased and re-programmed. Programming data into a particular cell also can disturb adjacent cells. Accordingly, there is a need to reduce the number and duration of programming cycles, as well as the damage that programming causes, by intelligently programming multi-level cells.
Like reference numerals refer to corresponding parts throughout the drawings.